﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BUGCOME.Model.File.Dto
{
    /// <summary>
    /// 文件DTO基类（包含关联配置）
    /// </summary>
    public class FileDtoBase
    {
        /// <summary>
        /// 文件原始名称（对应数据库表fileBase的realName字段）
        /// 用户上传时的原始文件名（含扩展名），未经过系统处理，用于记录用户原始输入
        /// </summary>
        public string? RealName { get; set; }

        /// <summary>
        /// 文件扩展名（对应数据库表fileBase的fileExt字段）
        /// 如"txt"、"jpg"，不含"."符号，与FileType关联，用于快速识别文件格式
        /// </summary>
        public string? FileExt { get; set; }

        /// <summary>
        /// 文件哈希值（对应数据库表fileBase的fileHash字段）
        /// 通过MD5/SHA256等算法生成的唯一标识，用于文件去重校验（系统不存储重复文件）
        /// </summary>
        public string? FileHash { get; set; }

        /// <summary>
        /// 文件大小（字节数，对应数据库表fileBase的fileSize字段）
        /// 记录文件的实际存储大小，用于容量统计、限制校验（如上传大小限制）
        /// </summary>
        public long? FileSize { get; set; }

        /// <summary>
        /// 文件类型（大类，对应数据库表fileBase的fileType字段）
        /// 如"文档"、"图片"、"视频"，或具体MIME类型（如"image/jpeg"），用于文件分类展示
        /// </summary>
        public string? FileType { get; set; }

        /// <summary>
        /// 可见性/访问权限（枚举映射，对应数据库表fileBase的visibility字段）
        /// 1-公开免费、2-按次付费、3-会员专属
        /// 控制文件的访问范围和权限校验逻辑
        /// </summary>
        public int? Visibility { get; set; }

        /// <summary>
        /// 免费文件专属扩展信息
        /// 当Visibility=1（公开免费）时有效，存储下载限制、描述等配置，其他场景可为空
        /// </summary>
        public FileFreeDto? FileFree { get; set; }

        /// <summary>
        /// 按次付费文件专属扩展信息
        /// 当Visibility=2（按次付费）时有效，存储单价、付费后有效期等配置，其他场景可为空
        /// </summary>
        public FilePayPerDownloadDto? FilePayPerDownload { get; set; }

        /// <summary>
        /// 会员专属文件专属扩展信息
        /// 当Visibility=3（会员专属）时有效，存储允许访问的会员等级等配置，其他场景可为空
        /// </summary>
        public FileMemberDto? FileMember { get; set; }
    }
}
